<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    /*
    * 简单工厂模式又被称为静态工厂方法模式。可以根据不同的参数返回
    *
    * 简单工厂模式专门定义一个类来负责创建其他类的实例，被创建的类通常具有不同类的实例共同的父类。
    *   1.工厂类角色：本模式的核心，含有一定的商业逻辑和判断逻辑，用来创建产品
    *   2.抽象产品角色：一般是具体产品继承的父类或者实现的接口，例如运算类
    *   3.具体产品角色：工厂类所创建的对象就是此角色的实例，例如乘法类，除法类，加法类，减法类
    *
    * 简单工厂模式优缺点：
    *   优点：简单，只要有一个正确的参数，就可以获取需要的对象
    *   缺点：如果后面需要增加产品，需要修改原代码逻辑。静态工厂方法不能被继承。
    *
    * */

    //抽象的产品类
    class Product{
        init(){
            console.log("你想怎么生产")
        }
    }

    //具体的产品
    class Hanbao extends Product{
        init(){
            console.log("生产汉堡")
        }
    }

    class Jitui extends Product{
        init(){
            console.log("生产鸡腿")
        }
    }

    //工厂
    class Factory{
        static getProduct(name){
            switch (name){
                case "Hanbao":
                    return new Hanbao()
                    break
                case  "Jitui":
                    return new Jitui()
                    break
                default:
                    throw new Error("没有你想要的")
                    break
            }
        }
    }

    Factory.getProduct("Hanbao").init() //工厂生产汉堡
    Factory.getProduct("Jitui").init() //工厂生产鸡腿
</script>
</body>
</html>